<?php
// +----------------------------------------------------------------------
// | ThinkPHP [ WE CAN DO IT JUST THINK ]
// +----------------------------------------------------------------------
// | Copyright (c) 2006-2016 http://thinkphp.cn All rights reserved.
// +----------------------------------------------------------------------
// | Licensed ( http://www.apache.org/licenses/LICENSE-2.0 )
// +----------------------------------------------------------------------
// | Author: 流年 <liu21st@gmail.com>
// +----------------------------------------------------------------------

// 应用公共文件
//无限极分类--数组中存在lev字段(菜单数据)
function getTree($arr,$pid=0){
    //声明静态数组
    static $list = [];
    foreach($arr as $k=>$v){
        if($v['pid'] == $pid){
            //对名称进行缩进处理
            $v['title'] = '|'.str_repeat('一一',$v['lev']).$v['title'];
            //对时间处理
            if(isset($v['ctime']) && is_numeric($v['ctime'])){
                $v['ctime'] = date('Y-m-d H:i:s',$v['ctime']);
            }
            $list[] = $v; //存放元素
            //提高效率去掉该元素
            unset($arr[$k]);
            //递归
            getTree($arr,$v['id']);
        }
    }
    return $list;
}


/*
 * 无限极分类--朝多维转换
 * 说明：$menuList 的元素的下标只能为元素中 id 的值
 */
function getTree_1($menuList){
    if(!is_array($menuList)) return false;
    $list = [];
    foreach($menuList as $k=>$v){
        if(isset($menuList[$v['pid']])){
            $menuList[$v['pid']]['son'][] = &$menuList[$v['id']];  // & 指引到同一内容
        }else{
            $list[] = &$menuList[$v['id']];
        }
    }
    return $list;
}


/*过滤参数*/
function inputFilter($str)
{
    if(empty($str) && $str!=0)
    {
        return '';
    }
    $str=trim($str);
    $str=str_ireplace("&","&amp;",$str);
    $str=str_ireplace(">","&gt;",$str);
    $str=str_ireplace("<","&lt;",$str);
    $str=str_ireplace(chr(34),"&",$str);
    $str=str_ireplace(chr(39),"&#39;",$str);
    $str=str_ireplace(chr(13),"<br />",$str);
    $str=str_ireplace("'","''",$str);
    $str=str_ireplace("select","sel&#101;ct",$str);
    $str=str_ireplace("join","jo&#105;n",$str);
    $str=str_ireplace("union","un&#105;on",$str);
    $str=str_ireplace("where","wh&#101;re",$str);
    $str=str_ireplace("insert","ins&#101;rt",$str);
    $str=str_ireplace("delete","del&#101;te",$str);
    $str=str_ireplace("update","up&#100;ate",$str);
    $str=str_ireplace("like","lik&#101;",$str);
    $str=str_ireplace("drop","dro&#112;",$str);
    $str=str_ireplace("create","cr&#101;ate",$str);
    $str=str_ireplace("modify","mod&#105;fy",$str);
    $str=str_ireplace("rename","ren&#097;me",$str);
    $str=str_ireplace("alter","alt&#101;r",$str);
    $str=str_ireplace("cast","ca&#115;",$str);
    return $str;
}

/*返回数据json对象*/
function echojson($msg='',$status=0,$data=[]){
    $list = ['msg'=>$msg,'status'=>$status];
    if(!empty($data)){
        $list['data'] = $data;
    }
    //$list = json_encode($list);
    return json($list);
}

/*layui表格数据格式处理*/
function laytable($code=1,$data){
    $list = ['code'=>0,'msg'=>"",'count'=>$code,'data'=>$data];
    if(is_array($data)){
        $list['data'] = $data;
    }else{
        $list['data'] = [];
    }
    return $list;
}



/*针对layui返回json对象格式*/
function echoJson_layui($msg='',$code=0,$data=[]){
    $list = ['msg'=>$msg,'code'=>$code];
    if(!empty($data)){
        $list['data'] = $data;
    }
    //$list = json_encode($list);
    return $list;
}

/*管理用户表密码生成*/
function createPwd($pwd,$salt){
    if(empty($pwd) || empty($salt)) return fasle;
    $str = md5(md5($pwd.$salt));
    return $str;
}

/*获取访问ip*/
function getip()
{
    $ip = false;
    if(!empty( $_SERVER ["HTTP_CLIENT_IP"]))
    {
        $ip = $_SERVER ["HTTP_CLIENT_IP"];
    }
    if (!empty( $_SERVER ['HTTP_X_FORWARDED_FOR']))
    {
        $ips = explode ( ", ",$_SERVER ['HTTP_X_FORWARDED_FOR']);
        if ($ip)
        {
            array_unshift ($ips,$ip);
            $ip = FALSE;
        }
        for($i = 0; $i < count ( $ips ); $i ++)
        {
            if (!preg_match( "/^(10|172\.16|192\.168)\./i",$ips[$i]))
            {
                $ip =$ips[$i];
                break;
            }
        }
    }
    $ip_str=($ip?$ip:$_SERVER['REMOTE_ADDR']);
    $ip_arr=explode(',',$ip_str);
    return $ip_arr[0];
}




/*判断浏览器*/
function getBrowser(){
    $flag=$_SERVER['HTTP_USER_AGENT'];		$para=array();
    // 检查操作系统
    if(preg_match('/Windows[\d\. \w]*/',$flag, $match)) $para['os']=$match[0];

    if(preg_match('/Chrome\/[\d\.\w]*/',$flag, $match)){
        // 检查Chrome
        $para['browser']=$match[0];
    }elseif(preg_match('/Safari\/[\d\.\w]*/',$flag, $match)){
        // 检查Safari
        $para['browser']=$match[0];
    }elseif(preg_match('/MSIE [\d\.\w]*/',$flag, $match)){
        // IE
        $para['browser']=$match[0];
    }elseif(preg_match('/Opera\/[\d\.\w]*/',$flag, $match)){
        // opera
        $para['browser']=$match[0];
    }elseif(preg_match('/Firefox\/[\d\.\w]*/',$flag, $match)){
        // Firefox
        $para['browser']=$match[0];
    }elseif(preg_match('/OmniWeb\/(v*)([^\s|;]+)/i',$flag, $match)){
        //OmniWeb
        $para['browser']=$match[2];
    }elseif(preg_match('/Netscape([\d]*)\/([^\s]+)/i',$flag, $match)){
        //Netscape
        $para['browser']=$match[2];
    }elseif(preg_match('/Lynx\/([^\s]+)/i',$flag, $match)){
        //Lynx
        $para['browser']=$match[1];
    }elseif(preg_match('/360SE/i',$flag, $match)){
        //360SE
        $para['browser']='360安全浏览器';
    }elseif(preg_match('/SE 2.x/i',$flag, $match)) {
        //搜狗
        $para['browser']='搜狗浏览器';
    }else{
        $para['browser']='unkown';
    }
    return $para;
}

/*
 * @explain 多维数组排序
 */
function arraySort($data,$value){
    foreach ($data as $key => $row)
    {
        $volume[$key]  = $row[$value];
    }
    array_multisort($volume, SORT_DESC,$data);
    return $data;
}

/*
 * @explain 返回随机字符
 * @param $num int 返回值的位数
 *        $str string 可选，随机返回字符的母字符串集合
 */
function getRandStr($num=6,$str='')
{
    if($num < 0){
        return "";
    }elseif($num > 30){
        $num = 30; //最长只能是30位
    }
    $rStr= "";
    if(empty($str))
    {
        $str = "0123456789qwrtyuiopasdfghjklzxcvbnmQWERTYUIOPASDFGHJKLZXCVBNM";
    }
    //随机抽取字符
    while(strlen($rStr) < $num)
    {
        $start = rand(0,strlen($str));
        $rStr .= substr($str,$start,1);
    }
    return $rStr;
}

/*
 * @explain 管理员token 生成
 * @param $id int 管理员id
 * @return string/bool
 */
function createAdminerToken($id)
{
    if(is_numeric($id) && $id > 0 && strpos($id,'.') === false)
    {
        $ip = getip();
        $token = md5($id."_token_".$ip);
        return $token;
    }
    return false;
}

/*
 * @explain 生成完整的域名
 * @param $params $uri string 模块/控制器/方法，[$https bool ]
 * @return string 完整的URL
 */
function createUrl($uri,$https=false)
{
    if(preg_match("/^\w+(\/|\\\)\w+(\/|\\\)\w+$/",$uri))
    {
        $http = $https?"https":"http";
        return $http.'://'.$_SERVER['HTTP_HOST'].url($uri);
    }
    return '';
}

/*
 * @explain 设置当前管理员的信息
 * @param $param $info [] 管理员信息
 */
function setAdminInfo($info)
{
    Session::set("adminerInfo_".$info['id'],$info);
}

?>